import os

import cv2
import numpy as np

import utils.fsutils as fsutils
from image_process_modules.table_split import table_split


def w01_convert_image_to_tables(filepath):
    # 获取文件名（不包含路径，带后缀）
    file_name_ = os.path.basename(filepath)
    # 获取文件名(不带后缀）
    file_name, ext_types = os.path.splitext(file_name_)
    # 获取缓存路径下的“分隔后的表图片”分类目录，用于存放分割后的单个表格图片
    split_table_dir = fsutils.get_cache_path_for_category("分隔后的表图片")
    # 获取该目录下的所有文件和文件夹名称（逻辑上此处应该都是文件夹，这些文件夹都是用图片名字来命名）
    split_table_dir_list = os.listdir(split_table_dir)
    # 检查是否已经存在以当前文件名命名的文件夹，如果存在，则跳过分割
    for i in split_table_dir_list:
        if file_name in os.path.basename(i):
            print(f"{filepath} 跳过分割，有之前生成的单个表格目录，请检查")
            return
    print("{} 开始处理".format(filepath))

    """     1、表格拆分    """
    # 读取原始图片
    original_image = cv2.imdecode(np.fromfile(filepath, dtype=np.uint8), cv2.IMREAD_COLOR)

    # 调用table_split函数对图片进行表格分割，返回分割后的表格图片列表
    image_list = table_split(original_image)

    # 遍历分割后的表格图片列表，为每张表格图片命名并保存
    for index, image in enumerate(image_list):
        # 生成分割后的表格图片文件路径
        table_file_path = os.path.join(split_table_dir, file_name, f"{index}.{ext_types}")
        # 确保父目录存在（当 exist_ok=True 时，即使目录已经存在，也不会触发异常）
        os.makedirs(os.path.dirname(table_file_path), exist_ok=True)
        # 保存表格图片到指定路径
        cv2.imencode(ext=ext_types, img=image)[1].tofile(table_file_path)

    print("{} 处理完成".format(filepath))
